Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - [MySQL] problema query
Forum - Altri Linguaggi - [MySQL] problema query

Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 18:47
Venerdì, 16/12/2011
Salve a tutti..ho un problema gravissimo che non riesco a capire..

Modello logico:
Studenti(CodiceStudente, Cognome, Nome, Sesso)
Voti (ID, DataVerifica, Voto, CodiceStudente)

Provo a fare questa query:
Si vuole l'elenco dei voti per ciascuno studente ordinato per DataVerifica crescente

SELECT DataVerifica, Studenti.*, Voto
FROM Voti JOIN Studenti USING(CodiceStudente)
GROUP BY CodiceStudente
ORDER BY DataVerifica;

perke la visualizzazione è scorretta ?mi visualizza

DataVerifica  | CodiceStudente  |Nome | Cognome | Sesso | Voto
2010-09-27               5                 w             y            M        7
2010-02-07               2                 z             K            F         8
2011-02-01               7                 j              i             F         4
2010-09-03               3                 O             P            M        2

Perke non mi visualizza i voti per ciascuno studente?Cosa sbaglio e cosa dovrei correggere ?.. aiutatemi vi supplico...un grazie anticipatamente

Ultima modifica effettuata da killer il 16/12/2011 alle 19:29
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:01
Venerdì, 16/12/2011
Perchè dici che non mostra i voti? I voti ci sono nell'output ...

Quale output ti aspetti?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 19:26
Venerdì, 16/12/2011
L'output che dovrei aspettarmi è questo:
DataVerifica  | CodiceStudente  |Nome | Cognome | Sesso | Voto
2010-09-27               1                 x             xx         M       7
2010-02-07               1                 x             xx         M       8
2011-02-01               1                 x             xx         M       4
2010-09-03               1                 x             xx         M       2
2010-09-27               6                 GG          GG         F       4
2010-02-07               6                 GG          GG         F       4
2011-02-01               6                 GG          GG         F       9
2010-09-03               6                 GG          GG         F       3

Capisci? cioè per ogni studente mi deve dare l'elenco dei voti...

quindi riassumendo  lo studente con codice '1' ha '4' voti (7,8,4,2) in date ....
                            e lo studente con codice '6' ha anche esso '4' voti(4,4,9,3)

Ultima modifica effettuata da killer il 16/12/2011 alle 19:33
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:56
Venerdì, 16/12/2011
Probabilmente ti basta qualcosa del genere

SELECT Voti.DataVerifica, Studenti.*, Voti.Voto
FROM Studenti JOIN Voti USING(CodiceStudente)
ORDER BY Studenti.CodiceStudente, DataVerifica


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 20:16
Venerdì, 16/12/2011
uhm...esatto funziona alla perferzione pero voglio capire questo concetto...kome mai in qst caso la group by non funziona ? :( sn disperato non riesco a capire riusciresti a spiegarmi? grazie ancora

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:30
Venerdì, 16/12/2011
Non è che "non funziona" ma "non ti serve" la GROUP BY ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 20:33
Venerdì, 16/12/2011
si vabbe fino qua ci sono...ma non capisco il motivo per cui non serve la group by !! di solito non si usa la group by per i raggruppamenti !? e di regola in questo caso io sto facendo un raggruppamento......adesso che ci penso  con questa query io visualizzo i codicestudente ordinati.. ma  non devono essere ordinati..
la traccia mi chiede di eseguire un ordinamento solo per Data non per CodiceStudente

Ultima modifica effettuata da killer il 16/12/2011 alle 20:36
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 11:52
Domenica, 18/12/2011
Vorrei farti notare che la tua query viola una regola dello standard secondo cui, in presenza di clausole GroupBy, l'insieme degli attributi di Select deve essere un sottoinsieme di quelli usati per il raggruppamento, più eventualmente altri aggregati sugli stessi attributi.

Questo vincolo esprime la proprietà che in un gruppo non possono esserci campi di valore ambiguo. Infatti, una volta eseguita la GroupBy, ogni gruppo è come se fosse un unico record, perciò non può contenere più valori diversi nello stesso campo. Un gruppo non è l'insieme di più record: questa è un'astrazione usata solo in fase di calcolo del gruppo.

Ad esempio, volendo raggruppare secondo A:
Codice sorgente - presumibilmente Plain Text

  1. A   B   C
  2. 1   2   3
  3. 1   7   8
  4. 2   5   3


Non puoi selezionare A e B nella select, poiché il primo raggruppamento sarebbe ambiguo:
Codice sorgente - presumibilmente Plain Text

  1. (1, 2 o 7?)
  2. (2, 5)


Tuttavia puoi selezionare Sum(B), poiché il valore dell'aggregato è unico:
Codice sorgente - presumibilmente Plain Text

  1. (1, 9)
  2. (2, 5)


PM Quote